{
 "cells": [
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:25:46.797423Z",
     "start_time": "2024-09-19T09:25:46.793523Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd \n",
    "import numpy as np \n",
    "from collections import Counter \n",
    "from _datetime import datetime \n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from scipy import stats \n",
    "import gc \n",
    "import warnings \n",
    "from pylab import mpl"
   ],
   "id": "4812b3a1b2b5f025",
   "outputs": [],
   "execution_count": 68
  },
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:05.372814Z",
     "start_time": "2024-09-19T09:25:47.354169Z"
    }
   },
   "source": [
    "\n",
    "test_format1= pd.read_csv(r\"D:/桌面/天猫复购预测/data/data_format1/test_format1.csv\") \n",
    "train_format1= pd.read_csv(r\"D:/桌面/天猫复购预测/data/data_format1/train_format1.csv\") \n",
    "user_info_format1= pd.read_csv(r\"D:/桌面/天猫复购预测/data/data_format1/user_info_format1.csv\") \n",
    "user_log_format1= pd.read_csv(r\"D:/桌面/天猫复购预测/data/data_format1/user_log_format1.csv\") \n"
   ],
   "outputs": [],
   "execution_count": 69
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:05.379933Z",
     "start_time": "2024-09-19T09:26:05.373843Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# test_format1  #\n",
    "test_format1.head()"
   ],
   "id": "30a303be77abc9f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  prob\n",
       "0   163968         4605   NaN\n",
       "1   360576         1581   NaN\n",
       "2    98688         1964   NaN\n",
       "3    98688         3645   NaN\n",
       "4   295296         3361   NaN"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>prob</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>163968</td>\n",
       "      <td>4605</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>360576</td>\n",
       "      <td>1581</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>98688</td>\n",
       "      <td>1964</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>98688</td>\n",
       "      <td>3645</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>295296</td>\n",
       "      <td>3361</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 70
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:05.387496Z",
     "start_time": "2024-09-19T09:26:05.380963Z"
    }
   },
   "cell_type": "code",
   "source": "train_format1.head()",
   "id": "5452a7bc93109944",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label\n",
       "0    34176         3906      0\n",
       "1    34176          121      0\n",
       "2    34176         4356      1\n",
       "3    34176         2217      0\n",
       "4   230784         4818      0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 71
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:05.394186Z",
     "start_time": "2024-09-19T09:26:05.388511Z"
    }
   },
   "cell_type": "code",
   "source": "user_info_format1.head() ",
   "id": "393375e166225695",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  age_range  gender\n",
       "0   376517        6.0     1.0\n",
       "1   234512        5.0     0.0\n",
       "2   344532        5.0     0.0\n",
       "3   186135        5.0     0.0\n",
       "4    30230        5.0     0.0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>376517</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>234512</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>344532</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>186135</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>30230</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 72
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:05.401608Z",
     "start_time": "2024-09-19T09:26:05.395201Z"
    }
   },
   "cell_type": "code",
   "source": [
    "user_log_format1.head() \n",
    "# item_id 商品id \n",
    "#cat_id 商品所属品类编码 \n",
    "#seller_id 商家唯一编码 \n",
    "#brand_id 商家品牌唯一编码 \n",
    "#time_tamp 购买时间 \n",
    "#action_Type 包含{0,1,2,3} 0表示单机 1 添加购物车 2 购买 3 收藏夹"
   ],
   "id": "60369ce4eda0e3fc",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  item_id  cat_id  seller_id  brand_id  time_stamp  action_type\n",
       "0   328862   323294     833       2882    2661.0         829            0\n",
       "1   328862   844400    1271       2882    2661.0         829            0\n",
       "2   328862   575153    1271       2882    2661.0         829            0\n",
       "3   328862   996875    1271       2882    2661.0         829            0\n",
       "4   328862  1086186    1271       1253    1049.0         829            0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>cat_id</th>\n",
       "      <th>seller_id</th>\n",
       "      <th>brand_id</th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>action_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>328862</td>\n",
       "      <td>323294</td>\n",
       "      <td>833</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>328862</td>\n",
       "      <td>844400</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>328862</td>\n",
       "      <td>575153</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>328862</td>\n",
       "      <td>996875</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>328862</td>\n",
       "      <td>1086186</td>\n",
       "      <td>1271</td>\n",
       "      <td>1253</td>\n",
       "      <td>1049.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 73
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:05.408035Z",
     "start_time": "2024-09-19T09:26:05.402613Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#查看有没有缺失值 \n",
    "user_info_format1.isna().sum()"
   ],
   "id": "9a747508c640c2dd",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id         0\n",
       "age_range    2217\n",
       "gender       6436\n",
       "dtype: int64"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 74
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:05.415089Z",
     "start_time": "2024-09-19T09:26:05.409047Z"
    }
   },
   "cell_type": "code",
   "source": "user_info_format1.isna().sum()/user_info_format1.shape[0]",
   "id": "9344e14beecd650d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id      0.000000\n",
       "age_range    0.005227\n",
       "gender       0.015173\n",
       "dtype: float64"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 75
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "",
   "id": "82026f2f1cdf231b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:06.133849Z",
     "start_time": "2024-09-19T09:26:05.415089Z"
    }
   },
   "cell_type": "code",
   "source": "user_log_format1.isna().sum()",
   "id": "ee6cbd21425c914c",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id            0\n",
       "item_id            0\n",
       "cat_id             0\n",
       "seller_id          0\n",
       "brand_id       91015\n",
       "time_stamp         0\n",
       "action_type        0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 76
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:06.511568Z",
     "start_time": "2024-09-19T09:26:06.134856Z"
    }
   },
   "cell_type": "code",
   "source": [
    "user_log_format1.isna().sum()/user_log_format1.shape[0]\n",
    "# 缺失值占比"
   ],
   "id": "5bc5dd630fa46e29",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id        0.000000\n",
       "item_id        0.000000\n",
       "cat_id         0.000000\n",
       "seller_id      0.000000\n",
       "brand_id       0.001657\n",
       "time_stamp     0.000000\n",
       "action_type    0.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 77
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "只有 商家品牌唯一编码缺失 ",
   "id": "5e4f8b4a1c868530"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:06.689309Z",
     "start_time": "2024-09-19T09:26:06.512583Z"
    }
   },
   "cell_type": "code",
   "source": [
    "label_gp = train_format1.groupby('label')['user_id'].count() \n",
    "print(\"正负样本数量：\",label_gp) \n",
    "# 创建子图\n",
    "fig, ax = plt.subplots(1, 2, figsize=(12, 6))\n",
    "\n",
    "# 绘制饼图\n",
    "ax[0].pie(label_gp, labels=label_gp.index, autopct='%1.1f%%', startangle=90)\n",
    "ax[0].set_title('正负样本数量饼图')\n",
    "ax[0].axis('equal')  # 使饼图为圆形\n",
    "\n",
    "# 绘制柱形图\n",
    "label_gp.plot(kind='bar', ax=ax[1], color=['#ff9999','#66b3ff'])\n",
    "ax[1].set_title('正负样本数量柱形图')\n",
    "ax[1].set_xlabel('标签')\n",
    "ax[1].set_ylabel('数量')\n",
    "ax[1].tick_params(axis='x', rotation=0)  # 旋转 x 轴标签\n",
    "\n",
    "# 显示图形\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "id": "a613b26fa92466f8",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正负样本数量： label\n",
      "0    244912\n",
      "1     15952\n",
      "Name: user_id, dtype: int64\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 27491 (\\N{CJK UNIFIED IDEOGRAPH-6B63}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 36127 (\\N{CJK UNIFIED IDEOGRAPH-8D1F}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 26679 (\\N{CJK UNIFIED IDEOGRAPH-6837}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 26412 (\\N{CJK UNIFIED IDEOGRAPH-672C}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 37327 (\\N{CJK UNIFIED IDEOGRAPH-91CF}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 39292 (\\N{CJK UNIFIED IDEOGRAPH-997C}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 22270 (\\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 26631 (\\N{CJK UNIFIED IDEOGRAPH-6807}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 31614 (\\N{CJK UNIFIED IDEOGRAPH-7B7E}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 26609 (\\N{CJK UNIFIED IDEOGRAPH-67F1}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\jiabaosen\\AppData\\Local\\Temp\\ipykernel_16556\\2170312848.py:19: UserWarning: Glyph 24418 (\\N{CJK UNIFIED IDEOGRAPH-5F62}) missing from current font.\n",
      "  plt.tight_layout()\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27491 (\\N{CJK UNIFIED IDEOGRAPH-6B63}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36127 (\\N{CJK UNIFIED IDEOGRAPH-8D1F}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26679 (\\N{CJK UNIFIED IDEOGRAPH-6837}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26412 (\\N{CJK UNIFIED IDEOGRAPH-672C}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 37327 (\\N{CJK UNIFIED IDEOGRAPH-91CF}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39292 (\\N{CJK UNIFIED IDEOGRAPH-997C}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22270 (\\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26631 (\\N{CJK UNIFIED IDEOGRAPH-6807}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31614 (\\N{CJK UNIFIED IDEOGRAPH-7B7E}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26609 (\\N{CJK UNIFIED IDEOGRAPH-67F1}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\Anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24418 (\\N{CJK UNIFIED IDEOGRAPH-5F62}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x600 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 78
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "从比列来看 数据的正负比例还是比较正常的 47:3 ",
   "id": "d9a7aaa96235a4d3"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:07.252312Z",
     "start_time": "2024-09-19T09:26:06.690349Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#训练集 和 用户通过user_id进行关联\n",
    "train_data_user_info =  train_format1.merge(user_info_format1,on=['user_id'],how='left')  \n",
    "plt.figure(figsize=(8,8))\n",
    "plt.title(\"Gender VS Label\") \n",
    "sns.countplot(x='gender',hue='label',data=train_data_user_info) \n",
    "# train_data_user_info.head()"
   ],
   "id": "172a28a8babb0c37",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Gender VS Label'}, xlabel='gender', ylabel='count'>"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ],
      "image/png": "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n3vuOf3jH/+QJFVUVEiSJk2adNpzHj161Pm/m+/SNmsO2OY4r6ysVN++fV328fT0dLnjWVFRIYfD4XJH9buOHTumn/70p5KkgICA0z9RQ2hoqK688kplZ2crJiZGX331lfbs2aPnnnvutPtbrVaNGDFCI0aMcM47LS1Nf/jDH5SVlaXbb7+9Vdc9nbKyMi1atEhbt26VxWLRT37yE0VEREhquRba/AHB5iUylZWVbfq6AOjeiGQAaIUJEyboww8/VHV1tfOub48ePXT55Zc79/Hz83P+7z59+kiSfv/736tnz54tzjdw4MBWX9vPz08lJSUu2xwOh/MziiWpd+/e8vHx0csvv3zac/zkJz9p9fW+a+rUqVqyZInKysr05ptvqn///vrZz37mss/cuXNVUVGhjIwMl+2+vr56/PHHtWnTJhUWFv6g6zebP3++Dhw4oJdeeknDhw9Xjx49VFdXp8zMzBb7fvd1keR87fr169euXxcAXRvLLQCgFe655x41NTXpscce08mTJ1uM19fXq6ioyPm4+W5qeXm5Lr/8cuefiooKpaWlOe9otsbo0aO1bds25/ILScrJyXFZZjBy5EjV1tbK4XC4XK+goEDPPfdci7XTrTVp0iR5eXnpgw8+0HvvvafY2NgW64t/8pOfKDc3V3/5y19aHH/s2DHV1tYqLCzsB12/2eeff66JEydq1KhRzmUn27Ztk9RyOUxOTo7L402bNmnAgAH6yU9+0q5fFwBdG3eSAaAVQkND9Zvf/EYPP/ywYmNjNW3aNA0dOlSNjY3avXu3srKyVFJSopkzZ0qSwsLCNGXKFD3++OM6fPiwLrvsMn311Vd66qmn9OMf//i0PwT4febMmaOtW7fq7rvv1syZM1VeXq6nnnpKXl5ezn2uueYajRgxQklJSUpKSlJwcLD27t2rZ555RmPHjm2xXKO1evXqpRtuuEEvvPCCvv76a02dOrXFPnfddZe2bt2qO++8U7fddpuioqJks9n0j3/8Q2vXrlVoaKjLD/qdTnV1dYs70ZIUFBSkG264QVdccYWys7N16aWXKigoSLt379bq1atlsVhc/uNBkl555RX17NlT//Ef/6FNmzYpJydHTz75pCwWS7t+XQB0bUQyALTSddddp7fffluvvvqqsrKydPjwYTkcDg0aNEg33nijfv7zn7tE1rJly7R69Wq99tprOnLkiPr166cbb7xRc+fObfELOv6dIUOGaN26dVq+fLnmzZunfv366eGHH9by5cud+1itVj3//PN6+umntXr1apWWliowMFAzZsw46481i4+P18aNGzVixAhddNFFLcZ9fX31xz/+UWvWrNGHH36oV199VQ0NDbrwwgs1efLkf/tRc80qKyu1bNmyFttHjhypG264QcuXL9fSpUu1dOlS52vyq1/9Sm+//bZ27drlcsySJUu0du1apaWladCgQfrtb3/rsga5vb4uALo2i+N0n/4OAAAAdGOsSQYAAAAMRDIAAABgIJIBAAAAA5EMAAAAGIhkAAAAwEAkAwAAAAYiGQAAADAQyQAAAICB37h3DpSWVolf0QIAAND5WCxSv369z7gfkXwOOBwikgEAAM5jLLcAAAAADEQyAAAAYCCSAQAAAANrkgEAALoZh8Mhu71Jdrvd3VNpd1arVVarhywWy1mdh0gGAADoRhobG1RZWaaGhnp3T+Wc6dHDW3369JWnp9cPPgeRDAAA0E04HA6Vlh6R1WqVr2+APDw8z/qOa2ficDjU1NSo6uoKlZYe0Y9+9OMf/PyIZAAAgG6isbFBDoddvr791aOHt7unc45cIA8PD5WVHVVjY4O8vHr8oLPwg3sAAADdjMXStROwPZ5f136FAAAAgB+ASAYAAAAMRDIAAABa5ZtvijV2bKS++ab43+735z/v0tixkT/4OvfdN1svvrj6Bx/fHohkAAAAwMCnWwAAAKDN/vrXPVqzJl0HD36tqqoTuuiiYM2bt0CXXXa5c5916zL0xhuZcjgcio6+QbNmJcrL69RnF2/d+r5eeeUlHTnyjS68cJDuvfc+jRw5yl1PpwXuJAMAAKBNvv32Wz388IO65prx2rhxszZt+kAXXvhjrVr1tMt+X355QOvWZeqZZ1brk08+1Pr1v5ck7djxqf73f5dp3rwF2rz5Q9199z1auHCBvvzygDuezmkRyQAAAGgTLy8vrV79kuLiblFDw0l9802x+vTx1fHjx537WCwWzZu3QD4+Pvrxjwfpttv+W++9t1mStGHD64qNjdewYcPl4eGhq666WldddbXeemuDu55SCyy3AAAAQJtYrVbt2rVT8+c/oLq6Ol100cXy8PCUw2F37tOrV2/17t3b+TgwMEglJcckSUeOfKPduz/Xm29mOcebmpoUETGi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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 79
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "性别分析",
   "id": "609a3f79cb47b80e"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "",
   "id": "a50e133a3ee86f0b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:07.863002Z",
     "start_time": "2024-09-19T09:26:07.253316Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.title(\"age_range VS Label\") \n",
    "sns.countplot(x='age_range',hue='label',data=train_data_user_info) \n",
    "# train_data_user_info.head()"
   ],
   "id": "b7c5ad96541658b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'age_range VS Label'}, xlabel='age_range', ylabel='count'>"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkYAAAHBCAYAAACMgHSRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJKklEQVR4nO3de1xUdf7H8fcMoIDKTQytbC0RXS8lQiJaWRrZZioi1m7kZjddsVprQd0V01IIt8satfIrzdjKbuqqoVa220VyvZbp1qYLZkqZICDIVWHm/P7oMNuEJiQMF1/Px8PHw3O+33PO9zMMM2/O+c4Zi2EYhgAAACBrcw8AAACgpSAYAQAAmAhGAAAAJoIRAACAiWAEAABgIhgBAACYCEYAAAAmghEAAICJYAQAAGAiGAFAPb311lvq3bu33n777TP2ycjIUO/evZWTkyNJqqmpUUZGhsaPH6+BAwcqNDRU48eP17Jly3Tq1KmfPN4zzzyj3r17n/O4v/nmG/Xu3Vt///vfz3lfs2fP1ogRI855P0BLRTACgHoaNWqUfHx8lJmZecY+69atU2hoqIKDgyVJc+fOVVpamm644QY9++yzSktL0zXXXKO0tDTNmDHDRSMHUF/uzT0AAGgt2rdvr9GjR2vVqlUqLi6Wn5+fU/v+/fv1n//8R8nJyZKkI0eOaM2aNXrkkUd06623OvpdffXVCggIUEpKivbu3avLL7/clWUA+AmcMQLauKqqKj355JO64YYb1L9/fw0aNEh33nmnvvzyS6d+a9as0U033aQBAwZo7Nix2rp1q/r27et0+eXIkSN66KGHNHjwYF1xxRW644479J///KfBY5o0aZISEhL0wAMPaNCgQZoyZYqk7y/5zJw5U1dddZX69eunyMhIzZw5U8ePH3dsO2LECKWlpWnRokUaOnSoLr/8ct199906ePCgS+qJjY1VdXW13nnnnTpta9eulbe3t2666SZJUkFBgQzD0Om+q3vMmDF66KGH5OPjU/8H7gx27typu+++W1deeaX69++vESNG6JlnnpHdbnfql5eXp6lTp+ryyy/X8OHDlZaWJpvN5tRn5cqVGj16tPr3769rr71WzzzzjGpqas55jEBrQTAC2riZM2dq1apVmjJlipYvX67Zs2frv//9rx588EHHG/batWs1e/ZsDRo0SEuWLNGoUaMUHx/v9KZZVFSkX//61/riiy80d+5cPfnkk7Lb7YqLi9OBAwcaPK63335bHh4e+utf/6rf/va3qqys1G9/+1sdOHBA8+bN0wsvvKDbb79d69ev11NPPeW07UsvvaSvvvpKjz32mBYuXKjPP/9cs2fPdrQ3ZT39+/dXnz599NZbbzmtt9lsyszM1OjRo+Xt7S1J6tOnj7p166bHHntMjzzyiDZv3qyysjJJUkBAgKZOnaoePXo0+LH7oX379mny5Mny8/PTX/7yF6Wnp2vQoEF69tlntWHDBqe+zzzzjAICAvTXv/5VEyZM0P/93/8pLS3N0f7cc89p7ty5ioyM1P/93/8pLi5OS5cu1cMPP3xOYwRaFQNAm3Xy5EnjrrvuMjZs2OC0fvny5UZISIiRl5dnGIZhXHvttcbUqVOd+jz33HNGSEiIsXr1asMwDOOpp54yBgwYYHzzzTdO+x85cqRx//33N2hct99+u9G/f3+jvLzcse4///mP8Zvf/MY4dOiQU9+pU6caN9xwg2P5uuuuM6677jqjpqbGse6ZZ54xQkJCjKKiIpfU87e//c3o3bu307YffvihERISYnz22WdOfffv32+MGzfOCAkJMUJCQow+ffoYEyZMMJYuXWpUVlb+5HHS0tKMkJCQn+yzZs0a45577jFsNptjnc1mM8LCwoy5c+cahmEYubm5RkhIiHHXXXc5bZucnGwMHDjQKC4uNk6cOGFcccUVxsMPP+zU58033zRCQkKM//73v4ZhGMasWbOM66677ifHBLRmnDEC2rB27drphRde0E033aT8/Hzt3LlTb7zxhj744ANJUnV1tQ4dOqQjR47oxhtvdNp29OjRTstbt27VL3/5SwUFBammpkY1NTWyWq265ppr9K9//avBY7v44osdZ1Yk6Ze//KVeffVVXXzxxcrNzVVWVpaWL1+ur776StXV1U7bDhgwQG5ubo7lrl27SpIqKytdUs/YsWPl4eHhNAl77dq1CgkJ0RVXXOHUNyQkRGvXrtWqVas0Y8YMRUREKDs7W48//riio6NVVFRUj0frzKKjo7V06VJVV1crOztb//jHP/TMM8/IZrPVedxqL/HVuuGGG1RRUaHPPvtMu3fvVmVlpUaMGOF4PGpqahyfQNuyZcs5jRNoLZh8DbRxWVlZSklJ0VdffaUOHTqod+/e6tChgyTJMAzHG3Pnzp2dtuvSpYvTcnFxsQ4dOqR+/fqd9jiVlZXy8vKq97gCAwPrrHvxxRf13HPP6fjx4woMDFS/fv3k5eWl0tJSp34/Po7V+v3feHa73SX1+Pn56frrr1dmZqZ+97vfqbS0VP/85z/10EMPnbHeAQMGaMCAAZo2bZoqKyv14osv6umnn9bSpUs1a9asM253NlVVVVqwYIHWrVunmpoaXXzxxQoNDZW7u3uduU0/fswDAgIkSSUlJY51tfO9fiw/P/9njxFoTQhGQBt2+PBhTZ8+XSNHjtRzzz2nSy65RJK0YsUKZWVlSfrf2ZbCwkKnbX+83KlTJw0ePFgzZ8487bHatWt3TmPNzMxUamqq/vCHPyg2Ntbxpv373/9e//73v+u9H1fVM2HCBN1999368ssv9fnnn8swDI0bN86pz6JFi/TBBx/Umajt5eWl+Ph4vfvuu477Hf1cycnJevfdd7V48WINHTrUcRYuMjKyTt8TJ044LRcUFEj6PkTWnl164oknTjvv6XRBFmiLuJQGtGGff/65Tp48qalTpzpCkSRHKDIMQ127dtUll1yi9957z2nbd99912l58ODBOnjwoC699FLH2Y8BAwborbfe0sqVK50ubf0cn3zyiTp16qQpU6Y4QlF5ebk++eSTOp+u+imuqmfo0KG66KKL9O677+rtt9/W9ddfL39/f6c+l156qQ4ePKiNGzfW2b68vFz5+fkKCQmpd22n88knnygiIkLXX3+9IxR9/vnnKioqqvO41f7ca23YsEFeXl664oordMUVV8jDw0N5eXlOj4eHh4eefPJJffPNN+c0TqC14IwR0Ib169dP7u7uevzxx3XXXXfp1KlT+vvf/64PP/xQklRRUSGLxaIHHnhACQkJmjdvnqKiorRv3z799a9/lfS/y1STJ0/WunXrNHnyZN11113y9/fXxo0b9eabb+qPf/zjOY/18ssv12uvvabU1FRdd911ys/P1wsvvKCCggL5+vrWez+uqsdqtWr8+PFau3atjh49queff75On+joaGVmZmrmzJnavn27hg8fLh8fH3399dd66aWX5Onpqbvuuuusx8rIyKizrmPHjoqNjdXll1+ut99+W6+99pp69uypffv2KT09XRaLRZWVlU7bbNq0SUFBQRo6dKg+/vhjvfHGG/r973+vjh07SpLuuecePf300yorK1NERITy8vL09NNPy2KxqE+fPmcdJ9AWEIyANuwXv/iFnnzyST377LOaNm2afH19NXDgQL388suaNGmSdu3apd69e2vMmDGqqKjQCy+8oNWrV6tXr16aM2eO5syZ4zgLERQUpNdff11PPvmk5s+fr5MnT6pHjx5KTk5WbGzsOY91/Pjx+uabb7R69Wq9+uqrCgoK0vDhw3Xbbbdp7ty5ysnJcdxN+mxcVU9MTIz++te/6sILL9TQoUPrtNdOfn/ppZf0zjvvaMOGDaqqqtIFF1ygESNGaNq0aXXmQp3OY489VmfdRRddpNjYWM2ePVvV1dVavHixTp06pYsvvljTpk1TTk6O3n//fadbFMyePVvvvPOOMjIy1KVLF/3xj3/UHXfc4WifMWOGunTpoldffVXLli2Tr6+vIiMj9dBDD6lTp071ekyA1s5i/Hh2HoDzzvr169W3b19ddtlljnUffvihpk6dqnXr1rW6swVtrR4ArkMwAqApU6bowIEDmjFjhrp166avv/5aaWlp+sUvfqGXX365Xvuw2+31mgvk5uYmi8VyrkP+SY1RD4DzE8EIgI4fP64nn3xSmzdvVlFRkQIDAzVq1Cg98MADjo/2n80zzzyjZ5999qz9XnrpJUVERJzrkH9SY9QD4PxEMALQKPLy8up1r5tLL73UMdkXAFoaghEAAICJ+xgBAACYCEYAAAAmghEAAICJYAQAAGDiztc/Q2FhqZiyDgBA62CxSJ071+/u7QSjn8EwRDACAKAN4lIaAACAiWAEAABgIhgBAACYmGMEAMB5wm63y2arae5hNDo3N3dZrY1zrodgBABAG2cYhk6cKFJlZVlzD6XJeHl1lI9PgCwWyznth2AEAEAbVxuKOnb0V7t27c85PLQkhmHo1KmTKis7Lkny9e18TvsjGAEA0IbZ7TZHKOrY0ae5h9Mk2rVrL0kqKzuuTp38z+myGpOvAQBow2w2m6T/hYe2qra+c51DRTACAOA80JYun51OY9VHMAIAADARjAAAwBl9990RXXVVuL777shP9vv001266qrwn32c++6bohdeeO5nb99YCEYAAAAmPpUGAADq5d//3qOlS9N16NDXKi09oUsv7akHH5yp/v0HOPq88kqG/v73lTIMQ1FRN+ree6fJw8NDkvSPf7yrl19+UUePfqeLLuqu3/3uPg0ePKS5yjktzhgB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QNcuV1RUnLWvp6dnnX4tSZcuXeTu7n7Wfq2xtlqGYegvf/mLPvjgA82ZM6dOe2uubdOmTdq8ebOsVqseeOCBOu2tqTa73a7ExETdeeed6tOnz0/2bU111SoqKlLfvn01atQobdy4Ua+//rq+/vrr084xam31lZSUaP/+/fr666+1Zs0arV27Vnl5eZo1a1advq2ttlp2u13p6en63e9+5/jD5MdaW212u12enp6aO3euPvvsM61fv14HDhxQWlpanb4trTaCUTPy9vZWZWWl07ra5Q4dOjit9/LyqjMBtqqqqk6/1qi11lZWVqYHHnhAmZmZeuWVV9S7d+86fVprbdL3L0xBQUFKTExUVlZWnbMPram25557Tu3atdOkSZPO2rc11VUrMDBQK1asUGxsrLy8vHThhRcqMTFRmzdvVllZmVPf1lZfu3btJElz5sxRx44dFRgYqBkzZuijjz5SeXm5U9/WVlut7du3Kz8//ye/0Ly11fbee+/p3Xff1W233aZ27dqpV69emj59ul577bU6fVtabQSjZtSrVy8VFxeroKDAse7AgQPq2rWrOnXq5NQ3JCRE2dnZTutycnLUq1cvl4y1KbXG2g4fPqwJEyaorKxMq1atOm0oklpfbZ9++qluvPFGp0+OnDp1Sh4eHnX+omtNta1bt047duxQeHi4wsPDtX79eq1fv17h4eF1+ramumrt27dPTzzxhGMuh/T9z81qtTqCRa3WVl9wcLDsdruqq6sd6+x2uyQ51Su1vtpqvfvuu4qKipK3t/cZ+7S22r777rs6n0Bzd3eXh4dHnb4trrZmmfINh9/85jfGgw8+aJSWljo+lZaWllanX05OjjFgwABjw4YNjln7AwYMML766qtmGHXD/dSn0lpbbcXFxca1115rzJ4927DZbD/Zt7XVVlZWZgwfPtxISUkxTp48aXzzzTdGbGysMW/evDp9W1ttPzRr1qwzfiqtNdb13XffGQMHDjSef/55o7q62vj222+NW265xfjTn/5Up29rq+/UqVNGVFSUcf/99xtlZWVGYWGh8dvf/taYPn16nb6trbZaN998s/Hmm2/+ZJ/WVlt2drbRv39/Iz093aipqTEOHz5s3HzzzUZqamqdvi2tNoJRMzt27Jhx//33G4MHDzaGDBlipKamGjU1NYZhGMbAgQONdevWOfpu3rzZGDt2rDFw4EBj9OjRxocffthcw26wHwej1lzb8uXLjZCQEOOKK64wBg4c6PTPMFp3bYbx/QvanXfeaYSHhxvXXXed8dRTTxknT540DKP111brx8GoLdS1fft249ZbbzVCQ0ONIUOGGAsWLDCqqqoMw2j99R09etSYMWOGMWzYMCM8PNyYOXOmUVJSYhhG66/NML6v4XTjbO21bdmyxZg4caIRFhZmXHvtta3mtcRiGD86FwkAAHCeYo4RAACAiWAEAABgIhgBAACYCEYAAAAmghEAAICJYAQAAGAiGAEAAJgIRgAAACaCEQAAgIlgBKDFeP/99/XrX/9akZGRuuKKK3T77bfr66+/liRt2LBBo0aNUnh4uO6++27NnTtXs2fPlvT9l4m+9NJLjvbbbrtNn3/+eb2O+c0336h3795KTU3VlVdeqUceeUSnTp3SokWL9Ktf/UqhoaGKjIzUggULHF9aOmnSJD355JOKi4tTaGiofvWrX2njxo1O+7z77rs1aNAg3XjjjcrIyHD6ouEvvvhCkyZN0pVXXqkbbrhBGRkZdb4QFUAzabYvIwGAH/juu++M/v37G//85z8NwzCMoqIi47bbbjMSEhKMTz/91OjXr5/xz3/+06iurjY2bdpk9O3b1/F9Z6+88opx7bXXGl9++aVx6tQpY+XKlUZ4eLhx7Nixsx43NzfXCAkJMZKSkoyTJ08aJSUlxvPPP2+MHj3ayMvLMwzDMD799FOjb9++xr/+9S/DMAzj9ttvNwYPHmx88cUXxsmTJ42nnnrKCAsLM6qqqoyamhrjpptuMmbPnm2Ul5cb33zzjTFu3DgjJCTEMIzvv/crLCzMeOWVV4xTp04Z2dnZRlRUlPHaa681xcMKoIE4YwSgRQgICNCGDRs0YsQIlZWV6ejRo/L391deXp5Wr16tG264QSNGjJC7u7uioqJ0/fXXO7ZdsWKFpk6dqj59+sjDw0OxsbHq2bOn3nrrrXofPzo6Wu3atZOPj49uueUWZWRkqEuXLsrPz1dVVZU6dOigvLw8R/9Ro0apb9++ateuncaPH6/S0lIVFhbqs88+09dff625c+fK29tbF110kR588EHHdm+99ZZ69uypuLg4eXh4KDg4WHfffbdWrFjROA8kgHPi3twDAABJ8vDw0Pr16/X666/LYrEoJCREZWVlcnd313fffae+ffs69e/evbsKCgokSd9++60WLVqkJ554wtFeU1Oj/v371/v4F1xwgeP/lZWVevTRR7Vz50517dpVffv2lWEYstvtjj5dunRx/N/d/fuXUrvd7gh03t7ejvaLL77Y8f9vv/1WX3zxhcLDwx3r7Ha73Nzc6j1WAE2HYASgRXj77bf1yiuv6LXXXtMvfvELSdKCBQv03//+VxdddJGOHDni1P/IkSNq166dJKlr16564IEHNHr0aEf74cOH5efnV+/jWywWx/+TkpLk6+urjz/+WO3bt5fdbteVV15Zr/1ceOGFKioqUmVlpby8vBxjrdW1a1dFRETohRdecKw7fvy4ysvL6z1WAE2HS2kAWoTS0lJZrVZ5enrKMAxt3rxZa9euVXV1tSZOnKj33ntPWVlZstls+uijj7Rp0ybHtrfccovS09N14MABSVJWVpZGjx6tnTt3/qyxlJWVqX379rJarSorK9Of//xnlZWVqbq6+qzbXnHFFQoODlZqaqoqKyuVl5entLQ0R/uYMWP02Wef6a233lJNTY3y8/P1u9/9TqmpqT9rrAAaF2eMALQI48eP1yeffKLRo0fLzc1Nl112me644w6tWLFCvXv31iOPPKL58+fr+PHjCg8PV2RkpDw8PCRJkydPlmEYio+PV35+voKCgvTwww9r5MiRP2ssSUlJevjhhzV48GB16NBB1157ra6++mr997//Peu2VqtVaWlpmjdvniIjI9W1a1eNGDFCX375pSTpoosu0rJly/TEE09o4cKFcnNz07XXXqs5c+b8rLECaFwWw+AzogBatoMHD8put6tnz56Odffff78uu+wyp4nNLUFVVZV2796twYMHO+YNvf/++5o3b56ysrKaeXQAzoZLaQBavJycHN1xxx06fPiwJGn79u3KysrS8OHDm3lkdXl4eGjGjBl68803ZbfbVVhYqOXLl+u6665r7qEBqAfOGAFoFdLT0/XGG2+opKREF110kaZOnaoxY8acdbuIiAidOnXqjO0bNmzQhRde2JhD1a5du/TnP/9ZBw4cUPv27TVq1CglJiY6fVINQMtEMAIAADBxKQ0AAMBEMAIAADARjAAAAEwEIwAAABPBCAAAwEQwAgAAMBGMAAAATAQjAAAAE8EIAADA9P+eurVaJjJ9tAAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 80
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "年龄分析",
   "id": "f025b84e7fb14d9f"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "",
   "id": "7ed2cf40142ed69d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:15.171349Z",
     "start_time": "2024-09-19T09:26:07.868517Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#user_log_format1中的所有行，对于train_format1中没有匹配的行，train_format1的列将填充为 NaN。\n",
    "all_data_1 = user_log_format1.merge(train_format1,on=['user_id'],how='left') \n",
    "all_data_1[all_data_1['label'].notnull()].head()"
   ],
   "id": "766486874719a3d0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     user_id  item_id  cat_id  seller_id  brand_id  time_stamp  action_type  \\\n",
       "419   234512   146770    1173        693    3186.0         625            0   \n",
       "420   234512   146770    1173        693    3186.0         625            0   \n",
       "421   234512  1106076     992       3783    8165.0        1016            0   \n",
       "422   234512  1106076     992       3783    8165.0        1016            0   \n",
       "423   234512   866567    1198        693    3186.0         625            0   \n",
       "\n",
       "     merchant_id  label  \n",
       "419       3018.0    0.0  \n",
       "420       3271.0    0.0  \n",
       "421       3018.0    0.0  \n",
       "422       3271.0    0.0  \n",
       "423       3018.0    0.0  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>cat_id</th>\n",
       "      <th>seller_id</th>\n",
       "      <th>brand_id</th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>action_type</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>419</th>\n",
       "      <td>234512</td>\n",
       "      <td>146770</td>\n",
       "      <td>1173</td>\n",
       "      <td>693</td>\n",
       "      <td>3186.0</td>\n",
       "      <td>625</td>\n",
       "      <td>0</td>\n",
       "      <td>3018.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>420</th>\n",
       "      <td>234512</td>\n",
       "      <td>146770</td>\n",
       "      <td>1173</td>\n",
       "      <td>693</td>\n",
       "      <td>3186.0</td>\n",
       "      <td>625</td>\n",
       "      <td>0</td>\n",
       "      <td>3271.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>421</th>\n",
       "      <td>234512</td>\n",
       "      <td>1106076</td>\n",
       "      <td>992</td>\n",
       "      <td>3783</td>\n",
       "      <td>8165.0</td>\n",
       "      <td>1016</td>\n",
       "      <td>0</td>\n",
       "      <td>3018.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>422</th>\n",
       "      <td>234512</td>\n",
       "      <td>1106076</td>\n",
       "      <td>992</td>\n",
       "      <td>3783</td>\n",
       "      <td>8165.0</td>\n",
       "      <td>1016</td>\n",
       "      <td>0</td>\n",
       "      <td>3271.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>423</th>\n",
       "      <td>234512</td>\n",
       "      <td>866567</td>\n",
       "      <td>1198</td>\n",
       "      <td>693</td>\n",
       "      <td>3186.0</td>\n",
       "      <td>625</td>\n",
       "      <td>0</td>\n",
       "      <td>3018.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 81
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:17.352541Z",
     "start_time": "2024-09-19T09:26:15.172364Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# groupby函数将all_data_2数据集按照time_stamp列进行分组，然后使用sum函数计算每个分组中label列的总和。\n",
    "all_data_2 = all_data_1[all_data_1['label'].notnull()] \n",
    "all_data_2_sum = all_data_2.groupby(['time_stamp'])['label'].sum().reset_index() \n",
    "all_data_2_sum.head()"
   ],
   "id": "9922db8552eec600",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   time_stamp   label\n",
       "0         511   943.0\n",
       "1         512   975.0\n",
       "2         513  1221.0\n",
       "3         514  1170.0\n",
       "4         515  1260.0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>511</td>\n",
       "      <td>943.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>512</td>\n",
       "      <td>975.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>513</td>\n",
       "      <td>1221.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>514</td>\n",
       "      <td>1170.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>515</td>\n",
       "      <td>1260.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 82
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:17.358601Z",
     "start_time": "2024-09-19T09:26:17.353555Z"
    }
   },
   "cell_type": "code",
   "source": "test_format1.head()",
   "id": "d8d0686dc0c29ba0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  prob\n",
       "0   163968         4605   NaN\n",
       "1   360576         1581   NaN\n",
       "2    98688         1964   NaN\n",
       "3    98688         3645   NaN\n",
       "4   295296         3361   NaN"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>prob</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>163968</td>\n",
       "      <td>4605</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>360576</td>\n",
       "      <td>1581</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>98688</td>\n",
       "      <td>1964</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>98688</td>\n",
       "      <td>3645</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>295296</td>\n",
       "      <td>3361</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 83
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "特征工程",
   "id": "425fa07afbad5e2f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:17.655007Z",
     "start_time": "2024-09-19T09:26:17.359216Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#训练集 跟测试集进行合并 然后再跟用户画像 left  target 方便后续区分出 训练集 测试集\n",
    "train_format1['target'] = 1 \n",
    "test_format1['target'] = -1 \n",
    "all_data = train_format1._append(test_format1) \n",
    "all_data = all_data.merge(user_info_format1,on=['user_id'],how='left')\n",
    "# 删除数据框 释放内存 \n",
    "del  train_format1 ,test_format1,user_info_format1 \n",
    "gc.collect()"
   ],
   "id": "f7b34196c44e382e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8316"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 84
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:17.662028Z",
     "start_time": "2024-09-19T09:26:17.655007Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.head()",
   "id": "840d4f82163c0440",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  prob  age_range  gender\n",
       "0    34176         3906    0.0       1   NaN        6.0     0.0\n",
       "1    34176          121    0.0       1   NaN        6.0     0.0\n",
       "2    34176         4356    1.0       1   NaN        6.0     0.0\n",
       "3    34176         2217    0.0       1   NaN        6.0     0.0\n",
       "4   230784         4818    0.0       1   NaN        0.0     0.0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 85
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:17.688227Z",
     "start_time": "2024-09-19T09:26:17.663030Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#删除['age_range','gender'] 缺失值的行\n",
    "all_data.dropna(subset=['age_range','gender'],inplace=True)\n",
    "all_data.isnull().sum()"
   ],
   "id": "fdfe18c4c669c38d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id             0\n",
       "merchant_id         0\n",
       "label          257626\n",
       "target              0\n",
       "prob           514767\n",
       "age_range           0\n",
       "gender              0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 86
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:18.654128Z",
     "start_time": "2024-09-19T09:26:17.689238Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#用户店铺数  根据user_id对user_log_format1数据框进行分组，并计算每个用户对应的seller_id的数量，然后重置索引。 \n",
    "sell = user_log_format1.groupby(['user_id'])['seller_id'].count().reset_index() \n",
    "all_data = all_data.merge(sell,on=['user_id'],how='inner') \n",
    "all_data.rename(columns={'seller_id':'sell_sum'},inplace=True) \n",
    "all_data.head()"
   ],
   "id": "a348cb5145f85257",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  prob  age_range  gender  sell_sum\n",
       "0    34176         3906    0.0       1   NaN        6.0     0.0       451\n",
       "1    34176          121    0.0       1   NaN        6.0     0.0       451\n",
       "2    34176         4356    1.0       1   NaN        6.0     0.0       451\n",
       "3    34176         2217    0.0       1   NaN        6.0     0.0       451\n",
       "4   230784         4818    0.0       1   NaN        0.0     0.0        54"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 87
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:23.019715Z",
     "start_time": "2024-09-19T09:26:18.655130Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#data（数据框）、single_name（列名）和new_name_1（新列名）\n",
    "def nunique_k(data,sigle_name,new_name_1):\n",
    "    data1=user_log_format1.groupby(['user_id'])[sigle_name].nunique().reset_index() \n",
    "    data_union =data.merge(data1,on=['user_id'],how='inner')\n",
    "    data_union.rename(columns={sigle_name:new_name_1},inplace=True) \n",
    "    return data_union \n",
    "#不同店铺个数 \n",
    "all_data = nunique_k(all_data,'seller_id','seller_id_unique') \n",
    "all_data"
   ],
   "id": "8b204a7f22751136",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        user_id  merchant_id  label  target  prob  age_range  gender  \\\n",
       "0         34176         3906    0.0       1   NaN        6.0     0.0   \n",
       "1         34176          121    0.0       1   NaN        6.0     0.0   \n",
       "2         34176         4356    1.0       1   NaN        6.0     0.0   \n",
       "3         34176         2217    0.0       1   NaN        6.0     0.0   \n",
       "4        230784         4818    0.0       1   NaN        0.0     0.0   \n",
       "...         ...          ...    ...     ...   ...        ...     ...   \n",
       "514762   228479         3111    NaN      -1   NaN        6.0     0.0   \n",
       "514763    97919         2341    NaN      -1   NaN        8.0     1.0   \n",
       "514764    97919         3971    NaN      -1   NaN        8.0     1.0   \n",
       "514765    32639         3536    NaN      -1   NaN        0.0     0.0   \n",
       "514766    32639         3319    NaN      -1   NaN        0.0     0.0   \n",
       "\n",
       "        sell_sum  seller_id_unique  \n",
       "0            451               109  \n",
       "1            451               109  \n",
       "2            451               109  \n",
       "3            451               109  \n",
       "4             54                20  \n",
       "...          ...               ...  \n",
       "514762      2004               278  \n",
       "514763        55                17  \n",
       "514764        55                17  \n",
       "514765        72                33  \n",
       "514766        72                33  \n",
       "\n",
       "[514767 rows x 9 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514762</th>\n",
       "      <td>228479</td>\n",
       "      <td>3111</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2004</td>\n",
       "      <td>278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514763</th>\n",
       "      <td>97919</td>\n",
       "      <td>2341</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514764</th>\n",
       "      <td>97919</td>\n",
       "      <td>3971</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514765</th>\n",
       "      <td>32639</td>\n",
       "      <td>3536</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514766</th>\n",
       "      <td>32639</td>\n",
       "      <td>3319</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>514767 rows × 9 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 88
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:31.306515Z",
     "start_time": "2024-09-19T09:26:23.020742Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#不同品类个数 \n",
    "all_data =  nunique_k(all_data,'cat_id','cat_id_unique') \n",
    "#活跃天数 \n",
    "all_data = nunique_k(all_data,'time_stamp','time_stamp_unique') \n",
    "#不同行为种数\n",
    "all_data=nunique_k(all_data,'action_type','action_type_unique')"
   ],
   "id": "5a4b6871b290fb27",
   "outputs": [],
   "execution_count": 89
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:31.317006Z",
     "start_time": "2024-09-19T09:26:31.307523Z"
    }
   },
   "cell_type": "code",
   "source": "all_data",
   "id": "16057bd97fc3fb34",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        user_id  merchant_id  label  target  prob  age_range  gender  \\\n",
       "0         34176         3906    0.0       1   NaN        6.0     0.0   \n",
       "1         34176          121    0.0       1   NaN        6.0     0.0   \n",
       "2         34176         4356    1.0       1   NaN        6.0     0.0   \n",
       "3         34176         2217    0.0       1   NaN        6.0     0.0   \n",
       "4        230784         4818    0.0       1   NaN        0.0     0.0   \n",
       "...         ...          ...    ...     ...   ...        ...     ...   \n",
       "514762   228479         3111    NaN      -1   NaN        6.0     0.0   \n",
       "514763    97919         2341    NaN      -1   NaN        8.0     1.0   \n",
       "514764    97919         3971    NaN      -1   NaN        8.0     1.0   \n",
       "514765    32639         3536    NaN      -1   NaN        0.0     0.0   \n",
       "514766    32639         3319    NaN      -1   NaN        0.0     0.0   \n",
       "\n",
       "        sell_sum  seller_id_unique  cat_id_unique  time_stamp_unique  \\\n",
       "0            451               109             45                 47   \n",
       "1            451               109             45                 47   \n",
       "2            451               109             45                 47   \n",
       "3            451               109             45                 47   \n",
       "4             54                20             17                 16   \n",
       "...          ...               ...            ...                ...   \n",
       "514762      2004               278             71                110   \n",
       "514763        55                17             14                  8   \n",
       "514764        55                17             14                  8   \n",
       "514765        72                33             24                 15   \n",
       "514766        72                33             24                 15   \n",
       "\n",
       "        action_type_unique  \n",
       "0                        3  \n",
       "1                        3  \n",
       "2                        3  \n",
       "3                        3  \n",
       "4                        2  \n",
       "...                    ...  \n",
       "514762                   3  \n",
       "514763                   3  \n",
       "514764                   3  \n",
       "514765                   4  \n",
       "514766                   4  \n",
       "\n",
       "[514767 rows x 12 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>action_type_unique</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514762</th>\n",
       "      <td>228479</td>\n",
       "      <td>3111</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2004</td>\n",
       "      <td>278</td>\n",
       "      <td>71</td>\n",
       "      <td>110</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514763</th>\n",
       "      <td>97919</td>\n",
       "      <td>2341</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514764</th>\n",
       "      <td>97919</td>\n",
       "      <td>3971</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514765</th>\n",
       "      <td>32639</td>\n",
       "      <td>3536</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "      <td>24</td>\n",
       "      <td>15</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514766</th>\n",
       "      <td>32639</td>\n",
       "      <td>3319</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "      <td>24</td>\n",
       "      <td>15</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>514767 rows × 12 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 90
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:31.323303Z",
     "start_time": "2024-09-19T09:26:31.317006Z"
    }
   },
   "cell_type": "code",
   "source": "user_log_format1.head()",
   "id": "3abb515c7a65b00",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  item_id  cat_id  seller_id  brand_id  time_stamp  action_type\n",
       "0   328862   323294     833       2882    2661.0         829            0\n",
       "1   328862   844400    1271       2882    2661.0         829            0\n",
       "2   328862   575153    1271       2882    2661.0         829            0\n",
       "3   328862   996875    1271       2882    2661.0         829            0\n",
       "4   328862  1086186    1271       1253    1049.0         829            0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>cat_id</th>\n",
       "      <th>seller_id</th>\n",
       "      <th>brand_id</th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>action_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>328862</td>\n",
       "      <td>323294</td>\n",
       "      <td>833</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>328862</td>\n",
       "      <td>844400</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>328862</td>\n",
       "      <td>575153</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>328862</td>\n",
       "      <td>996875</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2661.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>328862</td>\n",
       "      <td>1086186</td>\n",
       "      <td>1271</td>\n",
       "      <td>1253</td>\n",
       "      <td>1049.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 91
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:32.746479Z",
     "start_time": "2024-09-19T09:26:31.323303Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#活跃天数方差 \n",
    "std = user_log_format1.groupby(['user_id'])['time_stamp'].std().reset_index() \n",
    "all_data = all_data.merge(std,on=['user_id'],how='inner') \n",
    "all_data.rename(columns={'time_stamp':'time_stamp_std'},inplace=True)\n",
    "all_data.head()"
   ],
   "id": "eb61cc4bf75a60ba",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  prob  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0       1   NaN        6.0     0.0       451   \n",
       "1    34176          121    0.0       1   NaN        6.0     0.0       451   \n",
       "2    34176         4356    1.0       1   NaN        6.0     0.0       451   \n",
       "3    34176         2217    0.0       1   NaN        6.0     0.0       451   \n",
       "4   230784         4818    0.0       1   NaN        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  time_stamp_unique  action_type_unique  \\\n",
       "0               109             45                 47                   3   \n",
       "1               109             45                 47                   3   \n",
       "2               109             45                 47                   3   \n",
       "3               109             45                 47                   3   \n",
       "4                20             17                 16                   2   \n",
       "\n",
       "   time_stamp_std  \n",
       "0      206.449449  \n",
       "1      206.449449  \n",
       "2      206.449449  \n",
       "3      206.449449  \n",
       "4      218.341897  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>action_type_unique</th>\n",
       "      <th>time_stamp_std</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>218.341897</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 92
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:26:32.750777Z",
     "start_time": "2024-09-19T09:26:32.747486Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def most_love(data_1,most_name,new_name_2):                                  #对每个分组应用 Counter 函数，找出出现次数最多的元素。   \n",
    "    data2 = user_log_format1.groupby(['user_id'])[most_name].apply(lambda x: Counter(x).most_common(1)[0][0]).reset_index() \n",
    "    data_union_1 =  data_1.merge(data2,on=['user_id'],how='inner') \n",
    "    data_union_1.rename(columns={most_name:new_name_2},inplace=True) \n",
    "    return data_union_1"
   ],
   "id": "5ea4325264e67623",
   "outputs": [],
   "execution_count": 93
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:27:34.859326Z",
     "start_time": "2024-09-19T09:26:32.750777Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#用户最喜欢的店铺 \n",
    "all_data = most_love(all_data,'seller_id','sell_id_most') \n",
    "#最喜欢的类目 \n",
    "all_data = most_love(all_data,'cat_id','cat_id_most') \n",
    "#最喜欢的品牌 \n",
    "all_data = most_love(all_data,'brand_id','brand_id_most') \n",
    "#最常见的行为动作 \n",
    "all_data = most_love(all_data,'action_type','action_type_most') "
   ],
   "id": "baaab4393960022c",
   "outputs": [],
   "execution_count": 94
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:27:34.874032Z",
     "start_time": "2024-09-19T09:27:34.860341Z"
    }
   },
   "cell_type": "code",
   "source": "all_data",
   "id": "ff110893a5f45439",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        user_id  merchant_id  label  target  prob  age_range  gender  \\\n",
       "0         34176         3906    0.0       1   NaN        6.0     0.0   \n",
       "1         34176          121    0.0       1   NaN        6.0     0.0   \n",
       "2         34176         4356    1.0       1   NaN        6.0     0.0   \n",
       "3         34176         2217    0.0       1   NaN        6.0     0.0   \n",
       "4        230784         4818    0.0       1   NaN        0.0     0.0   \n",
       "...         ...          ...    ...     ...   ...        ...     ...   \n",
       "514762   228479         3111    NaN      -1   NaN        6.0     0.0   \n",
       "514763    97919         2341    NaN      -1   NaN        8.0     1.0   \n",
       "514764    97919         3971    NaN      -1   NaN        8.0     1.0   \n",
       "514765    32639         3536    NaN      -1   NaN        0.0     0.0   \n",
       "514766    32639         3319    NaN      -1   NaN        0.0     0.0   \n",
       "\n",
       "        sell_sum  seller_id_unique  cat_id_unique  time_stamp_unique  \\\n",
       "0            451               109             45                 47   \n",
       "1            451               109             45                 47   \n",
       "2            451               109             45                 47   \n",
       "3            451               109             45                 47   \n",
       "4             54                20             17                 16   \n",
       "...          ...               ...            ...                ...   \n",
       "514762      2004               278             71                110   \n",
       "514763        55                17             14                  8   \n",
       "514764        55                17             14                  8   \n",
       "514765        72                33             24                 15   \n",
       "514766        72                33             24                 15   \n",
       "\n",
       "        action_type_unique  time_stamp_std  sell_id_most  cat_id_most  \\\n",
       "0                        3      206.449449           331          662   \n",
       "1                        3      206.449449           331          662   \n",
       "2                        3      206.449449           331          662   \n",
       "3                        3      206.449449           331          662   \n",
       "4                        2      218.341897          3556          407   \n",
       "...                    ...             ...           ...          ...   \n",
       "514762                   3      156.030774          3017          662   \n",
       "514763                   3      196.860259           235          464   \n",
       "514764                   3      196.860259           235          464   \n",
       "514765                   4      172.779785          3319          898   \n",
       "514766                   4      172.779785          3319          898   \n",
       "\n",
       "        brand_id_most  action_type_most  \n",
       "0              4094.0                 0  \n",
       "1              4094.0                 0  \n",
       "2              4094.0                 0  \n",
       "3              4094.0                 0  \n",
       "4              1236.0                 0  \n",
       "...               ...               ...  \n",
       "514762         7703.0                 0  \n",
       "514763         2020.0                 0  \n",
       "514764         2020.0                 0  \n",
       "514765         5508.0                 0  \n",
       "514766         5508.0                 0  \n",
       "\n",
       "[514767 rows x 17 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>action_type_unique</th>\n",
       "      <th>time_stamp_std</th>\n",
       "      <th>sell_id_most</th>\n",
       "      <th>cat_id_most</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>218.341897</td>\n",
       "      <td>3556</td>\n",
       "      <td>407</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514762</th>\n",
       "      <td>228479</td>\n",
       "      <td>3111</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2004</td>\n",
       "      <td>278</td>\n",
       "      <td>71</td>\n",
       "      <td>110</td>\n",
       "      <td>3</td>\n",
       "      <td>156.030774</td>\n",
       "      <td>3017</td>\n",
       "      <td>662</td>\n",
       "      <td>7703.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514763</th>\n",
       "      <td>97919</td>\n",
       "      <td>2341</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>196.860259</td>\n",
       "      <td>235</td>\n",
       "      <td>464</td>\n",
       "      <td>2020.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514764</th>\n",
       "      <td>97919</td>\n",
       "      <td>3971</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>196.860259</td>\n",
       "      <td>235</td>\n",
       "      <td>464</td>\n",
       "      <td>2020.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514765</th>\n",
       "      <td>32639</td>\n",
       "      <td>3536</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "      <td>24</td>\n",
       "      <td>15</td>\n",
       "      <td>4</td>\n",
       "      <td>172.779785</td>\n",
       "      <td>3319</td>\n",
       "      <td>898</td>\n",
       "      <td>5508.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514766</th>\n",
       "      <td>32639</td>\n",
       "      <td>3319</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "      <td>24</td>\n",
       "      <td>15</td>\n",
       "      <td>4</td>\n",
       "      <td>172.779785</td>\n",
       "      <td>3319</td>\n",
       "      <td>898</td>\n",
       "      <td>5508.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>514767 rows × 17 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 95
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:27:34.878288Z",
     "start_time": "2024-09-19T09:27:34.875035Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def most_love_cnt(data_1,most_name,new_name_2):\n",
    "    data2 = user_log_format1.groupby(['user_id'])[most_name].apply(lambda x:Counter(x).most_common(1)[0][1]).reset_index()\n",
    "    data_union_1 = data_1.merge(data2,on=['user_id'],how='inner')\n",
    "    data_union_1.rename(columns={most_name:new_name_2},inplace=True) \n",
    "    return data_union_1 \n",
    "    "
   ],
   "id": "9bc42e7a52cbd913",
   "outputs": [],
   "execution_count": 96
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:28:36.783952Z",
     "start_time": "2024-09-19T09:27:34.879289Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#用户最喜欢的店铺 行为次数 \n",
    "all_data = most_love_cnt(all_data,'seller_id','seller_id_most_cnt')\n",
    "#最喜欢的类目 行为次数 \n",
    "all_data =  most_love_cnt(all_data,'cat_id','cat_id_most_cnt') \n",
    "#最喜欢的品牌 行为次数 \n",
    "all_data = most_love_cnt(all_data,'brand_id','brand_id_most_cnt') \n",
    "#最常见的行为动作 行为次数 \n",
    "all_data = most_love_cnt(all_data,'action_type','action_type_most_cnt')"
   ],
   "id": "9251a0fef8ef3e45",
   "outputs": [],
   "execution_count": 97
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:28:36.920815Z",
     "start_time": "2024-09-19T09:28:36.784962Z"
    }
   },
   "cell_type": "code",
   "source": "all_data",
   "id": "4ed6bd8547d1f185",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        user_id  merchant_id  label  target  prob  age_range  gender  \\\n",
       "0         34176         3906    0.0       1   NaN        6.0     0.0   \n",
       "1         34176          121    0.0       1   NaN        6.0     0.0   \n",
       "2         34176         4356    1.0       1   NaN        6.0     0.0   \n",
       "3         34176         2217    0.0       1   NaN        6.0     0.0   \n",
       "4        230784         4818    0.0       1   NaN        0.0     0.0   \n",
       "...         ...          ...    ...     ...   ...        ...     ...   \n",
       "514762   228479         3111    NaN      -1   NaN        6.0     0.0   \n",
       "514763    97919         2341    NaN      -1   NaN        8.0     1.0   \n",
       "514764    97919         3971    NaN      -1   NaN        8.0     1.0   \n",
       "514765    32639         3536    NaN      -1   NaN        0.0     0.0   \n",
       "514766    32639         3319    NaN      -1   NaN        0.0     0.0   \n",
       "\n",
       "        sell_sum  seller_id_unique  cat_id_unique  ...  action_type_unique  \\\n",
       "0            451               109             45  ...                   3   \n",
       "1            451               109             45  ...                   3   \n",
       "2            451               109             45  ...                   3   \n",
       "3            451               109             45  ...                   3   \n",
       "4             54                20             17  ...                   2   \n",
       "...          ...               ...            ...  ...                 ...   \n",
       "514762      2004               278             71  ...                   3   \n",
       "514763        55                17             14  ...                   3   \n",
       "514764        55                17             14  ...                   3   \n",
       "514765        72                33             24  ...                   4   \n",
       "514766        72                33             24  ...                   4   \n",
       "\n",
       "        time_stamp_std  sell_id_most  cat_id_most  brand_id_most  \\\n",
       "0           206.449449           331          662         4094.0   \n",
       "1           206.449449           331          662         4094.0   \n",
       "2           206.449449           331          662         4094.0   \n",
       "3           206.449449           331          662         4094.0   \n",
       "4           218.341897          3556          407         1236.0   \n",
       "...                ...           ...          ...            ...   \n",
       "514762      156.030774          3017          662         7703.0   \n",
       "514763      196.860259           235          464         2020.0   \n",
       "514764      196.860259           235          464         2020.0   \n",
       "514765      172.779785          3319          898         5508.0   \n",
       "514766      172.779785          3319          898         5508.0   \n",
       "\n",
       "        action_type_most  seller_id_most_cnt  cat_id_most_cnt  \\\n",
       "0                      0                  70               98   \n",
       "1                      0                  70               98   \n",
       "2                      0                  70               98   \n",
       "3                      0                  70               98   \n",
       "4                      0                  10                9   \n",
       "...                  ...                 ...              ...   \n",
       "514762                 0                 147              284   \n",
       "514763                 0                  18               20   \n",
       "514764                 0                  18               20   \n",
       "514765                 0                  11               12   \n",
       "514766                 0                  11               12   \n",
       "\n",
       "        brand_id_most_cnt  action_type_most_cnt  \n",
       "0                      70                   410  \n",
       "1                      70                   410  \n",
       "2                      70                   410  \n",
       "3                      70                   410  \n",
       "4                      10                    47  \n",
       "...                   ...                   ...  \n",
       "514762                147                  1770  \n",
       "514763                 18                    46  \n",
       "514764                 18                    46  \n",
       "514765                 12                    62  \n",
       "514766                 12                    62  \n",
       "\n",
       "[514767 rows x 21 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>action_type_unique</th>\n",
       "      <th>time_stamp_std</th>\n",
       "      <th>sell_id_most</th>\n",
       "      <th>cat_id_most</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>206.449449</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>218.341897</td>\n",
       "      <td>3556</td>\n",
       "      <td>407</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514762</th>\n",
       "      <td>228479</td>\n",
       "      <td>3111</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2004</td>\n",
       "      <td>278</td>\n",
       "      <td>71</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>156.030774</td>\n",
       "      <td>3017</td>\n",
       "      <td>662</td>\n",
       "      <td>7703.0</td>\n",
       "      <td>0</td>\n",
       "      <td>147</td>\n",
       "      <td>284</td>\n",
       "      <td>147</td>\n",
       "      <td>1770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514763</th>\n",
       "      <td>97919</td>\n",
       "      <td>2341</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>196.860259</td>\n",
       "      <td>235</td>\n",
       "      <td>464</td>\n",
       "      <td>2020.0</td>\n",
       "      <td>0</td>\n",
       "      <td>18</td>\n",
       "      <td>20</td>\n",
       "      <td>18</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514764</th>\n",
       "      <td>97919</td>\n",
       "      <td>3971</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>196.860259</td>\n",
       "      <td>235</td>\n",
       "      <td>464</td>\n",
       "      <td>2020.0</td>\n",
       "      <td>0</td>\n",
       "      <td>18</td>\n",
       "      <td>20</td>\n",
       "      <td>18</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514765</th>\n",
       "      <td>32639</td>\n",
       "      <td>3536</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>4</td>\n",
       "      <td>172.779785</td>\n",
       "      <td>3319</td>\n",
       "      <td>898</td>\n",
       "      <td>5508.0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>12</td>\n",
       "      <td>62</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>514766</th>\n",
       "      <td>32639</td>\n",
       "      <td>3319</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>33</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>4</td>\n",
       "      <td>172.779785</td>\n",
       "      <td>3319</td>\n",
       "      <td>898</td>\n",
       "      <td>5508.0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>12</td>\n",
       "      <td>62</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>514767 rows × 21 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 98
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:28:37.030959Z",
     "start_time": "2024-09-19T09:28:36.921818Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#从all_data数据集中提取所有不重复的user_id，并将其转换为列表。\n",
    "user_id_union = list(set(all_data['user_id'])) \n",
    "#函数接收三个参数：data（数据集）、num（要选择的动作类型编号）、new_name（新列的名称）。 \n",
    "# 根据用户 ID 和动作类型，从data数据集中选择特定的动作类型，并将其添加到一个新的数据集中。\n",
    "def action_type_select(data,num,new_name):\n",
    "    d=user_log_format1.groupby(['user_id'])['action_type'].apply(lambda x:Counter)\n",
    "    e=dict(d)\n",
    "    k=[]\n",
    "    for i in user_id_union:\n",
    "        try:\n",
    "            k.append(e[i,num])\n",
    "        except KeyError:\n",
    "            k.append(0)\n",
    "    data3 = pd.DataFrame({'user_id':user_id_union,new_name:k}) \n",
    "    data_union_2=data.merge(data3,on=['user_id'],how='inner') \n",
    "    return data_union_2 "
   ],
   "id": "83ad329b4d9786b6",
   "outputs": [],
   "execution_count": 99
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:09.882839Z",
     "start_time": "2024-09-19T09:28:37.031979Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#点击次数 \n",
    "all_data = action_type_select(all_data,0,'action_type_sum_0')\n",
    "#加购次数 \n",
    "all_data = action_type_select(all_data,1,'action_type_sum_1') \n",
    "#购买次数 \n",
    "all_data = action_type_select(all_data,2,'action_type_sum_2') \n",
    "#收藏次数 \n",
    "all_data = action_type_select(all_data,3,'action_type_sum_3') "
   ],
   "id": "f9b0a933ec467b0",
   "outputs": [],
   "execution_count": 100
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:09.896095Z",
     "start_time": "2024-09-19T09:29:09.883857Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.head()",
   "id": "c65bee726f3b4bc2",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  prob  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0       1   NaN        6.0     0.0       451   \n",
       "1    34176          121    0.0       1   NaN        6.0     0.0       451   \n",
       "2    34176         4356    1.0       1   NaN        6.0     0.0       451   \n",
       "3    34176         2217    0.0       1   NaN        6.0     0.0       451   \n",
       "4   230784         4818    0.0       1   NaN        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  ...  brand_id_most  action_type_most  \\\n",
       "0               109             45  ...         4094.0                 0   \n",
       "1               109             45  ...         4094.0                 0   \n",
       "2               109             45  ...         4094.0                 0   \n",
       "3               109             45  ...         4094.0                 0   \n",
       "4                20             17  ...         1236.0                 0   \n",
       "\n",
       "   seller_id_most_cnt  cat_id_most_cnt  brand_id_most_cnt  \\\n",
       "0                  70               98                 70   \n",
       "1                  70               98                 70   \n",
       "2                  70               98                 70   \n",
       "3                  70               98                 70   \n",
       "4                  10                9                 10   \n",
       "\n",
       "   action_type_most_cnt  action_type_sum_0  action_type_sum_1  \\\n",
       "0                   410                  0                  0   \n",
       "1                   410                  0                  0   \n",
       "2                   410                  0                  0   \n",
       "3                   410                  0                  0   \n",
       "4                    47                  0                  0   \n",
       "\n",
       "   action_type_sum_2  action_type_sum_3  \n",
       "0                  0                  0  \n",
       "1                  0                  0  \n",
       "2                  0                  0  \n",
       "3                  0                  0  \n",
       "4                  0                  0  \n",
       "\n",
       "[5 rows x 25 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2</th>\n",
       "      <th>action_type_sum_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>47</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 101
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:10.072809Z",
     "start_time": "2024-09-19T09:29:09.897118Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train = all_data[all_data['target']==1].reset_index(drop = True)\n",
    "test = all_data[all_data['target']==-1].reset_index(drop = True) \n",
    "train.drop(['target'],axis = 1,inplace =True)\n",
    "test.drop(['target'],axis = 1,inplace =True) \n",
    "train.fillna(0,inplace = True) \n",
    "test.drop(['label'],axis = 1,inplace = True) \n",
    "test.fillna(0,inplace = True) \n",
    "test.head()"
   ],
   "id": "3f57b832ddb4d81e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  prob  age_range  gender  sell_sum  seller_id_unique  \\\n",
       "0   163968         4605   0.0        0.0     0.0        81                21   \n",
       "1   360576         1581   0.0        2.0     2.0        77                37   \n",
       "2    98688         1964   0.0        6.0     0.0        56                22   \n",
       "3    98688         3645   0.0        6.0     0.0        56                22   \n",
       "4   295296         3361   0.0        2.0     1.0       176                56   \n",
       "\n",
       "   cat_id_unique  time_stamp_unique  action_type_unique  ...  brand_id_most  \\\n",
       "0             21                 26                   3  ...         7178.0   \n",
       "1             27                 22                   2  ...         4066.0   \n",
       "2             18                 10                   2  ...         3637.0   \n",
       "3             18                 10                   2  ...         3637.0   \n",
       "4             32                 33                   3  ...          487.0   \n",
       "\n",
       "   action_type_most  seller_id_most_cnt  cat_id_most_cnt  brand_id_most_cnt  \\\n",
       "0                 0                  22               17                 22   \n",
       "1                 0                  10               13                 10   \n",
       "2                 0                  11               11                 11   \n",
       "3                 0                  11               11                 11   \n",
       "4                 0                  50               59                 49   \n",
       "\n",
       "   action_type_most_cnt  action_type_sum_0  action_type_sum_1  \\\n",
       "0                    63                  0                  0   \n",
       "1                    71                  0                  0   \n",
       "2                    51                  0                  0   \n",
       "3                    51                  0                  0   \n",
       "4                   162                  0                  0   \n",
       "\n",
       "   action_type_sum_2  action_type_sum_3  \n",
       "0                  0                  0  \n",
       "1                  0                  0  \n",
       "2                  0                  0  \n",
       "3                  0                  0  \n",
       "4                  0                  0  \n",
       "\n",
       "[5 rows x 23 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>action_type_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2</th>\n",
       "      <th>action_type_sum_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>163968</td>\n",
       "      <td>4605</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>81</td>\n",
       "      <td>21</td>\n",
       "      <td>21</td>\n",
       "      <td>26</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>7178.0</td>\n",
       "      <td>0</td>\n",
       "      <td>22</td>\n",
       "      <td>17</td>\n",
       "      <td>22</td>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>360576</td>\n",
       "      <td>1581</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>77</td>\n",
       "      <td>37</td>\n",
       "      <td>27</td>\n",
       "      <td>22</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>4066.0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>10</td>\n",
       "      <td>71</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>98688</td>\n",
       "      <td>1964</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56</td>\n",
       "      <td>22</td>\n",
       "      <td>18</td>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>3637.0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>11</td>\n",
       "      <td>11</td>\n",
       "      <td>51</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>98688</td>\n",
       "      <td>3645</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56</td>\n",
       "      <td>22</td>\n",
       "      <td>18</td>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>3637.0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>11</td>\n",
       "      <td>11</td>\n",
       "      <td>51</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>295296</td>\n",
       "      <td>3361</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>176</td>\n",
       "      <td>56</td>\n",
       "      <td>32</td>\n",
       "      <td>33</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>487.0</td>\n",
       "      <td>0</td>\n",
       "      <td>50</td>\n",
       "      <td>59</td>\n",
       "      <td>49</td>\n",
       "      <td>162</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 102
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:10.110424Z",
     "start_time": "2024-09-19T09:29:10.074809Z"
    }
   },
   "cell_type": "code",
   "source": "train.head",
   "id": "f96436eba09401b8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<bound method NDFrame.head of         user_id  merchant_id  label  prob  age_range  gender  sell_sum  \\\n",
       "0         34176         3906    0.0   0.0        6.0     0.0       451   \n",
       "1         34176          121    0.0   0.0        6.0     0.0       451   \n",
       "2         34176         4356    1.0   0.0        6.0     0.0       451   \n",
       "3         34176         2217    0.0   0.0        6.0     0.0       451   \n",
       "4        230784         4818    0.0   0.0        0.0     0.0        54   \n",
       "...         ...          ...    ...   ...        ...     ...       ...   \n",
       "257136   359807         4325    0.0   0.0        4.0     1.0       117   \n",
       "257137   294527         3971    0.0   0.0        0.0     1.0       198   \n",
       "257138   294527          152    0.0   0.0        0.0     1.0       198   \n",
       "257139   294527         2537    0.0   0.0        0.0     1.0       198   \n",
       "257140   229247         4140    0.0   0.0        4.0     2.0       194   \n",
       "\n",
       "        seller_id_unique  cat_id_unique  time_stamp_unique  ...  \\\n",
       "0                    109             45                 47  ...   \n",
       "1                    109             45                 47  ...   \n",
       "2                    109             45                 47  ...   \n",
       "3                    109             45                 47  ...   \n",
       "4                     20             17                 16  ...   \n",
       "...                  ...            ...                ...  ...   \n",
       "257136                33             25                 12  ...   \n",
       "257137                38             20                  6  ...   \n",
       "257138                38             20                  6  ...   \n",
       "257139                38             20                  6  ...   \n",
       "257140                50             29                 23  ...   \n",
       "\n",
       "        brand_id_most  action_type_most  seller_id_most_cnt  cat_id_most_cnt  \\\n",
       "0              4094.0                 0                  70               98   \n",
       "1              4094.0                 0                  70               98   \n",
       "2              4094.0                 0                  70               98   \n",
       "3              4094.0                 0                  70               98   \n",
       "4              1236.0                 0                  10                9   \n",
       "...               ...               ...                 ...              ...   \n",
       "257136         2276.0                 0                  22               15   \n",
       "257137         6143.0                 0                  28               38   \n",
       "257138         6143.0                 0                  28               38   \n",
       "257139         6143.0                 0                  28               38   \n",
       "257140         5697.0                 0                  24               33   \n",
       "\n",
       "        brand_id_most_cnt  action_type_most_cnt  action_type_sum_0  \\\n",
       "0                      70                   410                  0   \n",
       "1                      70                   410                  0   \n",
       "2                      70                   410                  0   \n",
       "3                      70                   410                  0   \n",
       "4                      10                    47                  0   \n",
       "...                   ...                   ...                ...   \n",
       "257136                 25                   107                  0   \n",
       "257137                 28                   162                  0   \n",
       "257138                 28                   162                  0   \n",
       "257139                 28                   162                  0   \n",
       "257140                 24                   181                  0   \n",
       "\n",
       "        action_type_sum_1  action_type_sum_2  action_type_sum_3  \n",
       "0                       0                  0                  0  \n",
       "1                       0                  0                  0  \n",
       "2                       0                  0                  0  \n",
       "3                       0                  0                  0  \n",
       "4                       0                  0                  0  \n",
       "...                   ...                ...                ...  \n",
       "257136                  0                  0                  0  \n",
       "257137                  0                  0                  0  \n",
       "257138                  0                  0                  0  \n",
       "257139                  0                  0                  0  \n",
       "257140                  0                  0                  0  \n",
       "\n",
       "[257141 rows x 24 columns]>"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 103
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:10.207968Z",
     "start_time": "2024-09-19T09:29:10.111427Z"
    }
   },
   "cell_type": "code",
   "source": [
    "all = all_data[all_data['target']==1].reset_index(drop = True)\n",
    "all.drop(['target'],axis = 1,inplace =True)\n",
    "all.fillna(0,inplace = True) \n",
    "all.head()"
   ],
   "id": "b46c8819920edef4",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  prob  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0   0.0        6.0     0.0       451   \n",
       "1    34176          121    0.0   0.0        6.0     0.0       451   \n",
       "2    34176         4356    1.0   0.0        6.0     0.0       451   \n",
       "3    34176         2217    0.0   0.0        6.0     0.0       451   \n",
       "4   230784         4818    0.0   0.0        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  time_stamp_unique  ...  brand_id_most  \\\n",
       "0               109             45                 47  ...         4094.0   \n",
       "1               109             45                 47  ...         4094.0   \n",
       "2               109             45                 47  ...         4094.0   \n",
       "3               109             45                 47  ...         4094.0   \n",
       "4                20             17                 16  ...         1236.0   \n",
       "\n",
       "   action_type_most  seller_id_most_cnt  cat_id_most_cnt  brand_id_most_cnt  \\\n",
       "0                 0                  70               98                 70   \n",
       "1                 0                  70               98                 70   \n",
       "2                 0                  70               98                 70   \n",
       "3                 0                  70               98                 70   \n",
       "4                 0                  10                9                 10   \n",
       "\n",
       "   action_type_most_cnt  action_type_sum_0  action_type_sum_1  \\\n",
       "0                   410                  0                  0   \n",
       "1                   410                  0                  0   \n",
       "2                   410                  0                  0   \n",
       "3                   410                  0                  0   \n",
       "4                    47                  0                  0   \n",
       "\n",
       "   action_type_sum_2  action_type_sum_3  \n",
       "0                  0                  0  \n",
       "1                  0                  0  \n",
       "2                  0                  0  \n",
       "3                  0                  0  \n",
       "4                  0                  0  \n",
       "\n",
       "[5 rows x 24 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2</th>\n",
       "      <th>action_type_sum_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>16</td>\n",
       "      <td>...</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>47</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 104
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:11.807086Z",
     "start_time": "2024-09-19T09:29:10.208972Z"
    }
   },
   "cell_type": "code",
   "source": "all.to_csv(r\"D:\\桌面\\天猫复购预测\\data\\data_format1\\all_k.csv\",header=True,index=False)",
   "id": "572fd54eeabd4680",
   "outputs": [],
   "execution_count": 105
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:11.829882Z",
     "start_time": "2024-09-19T09:29:11.808096Z"
    }
   },
   "cell_type": "code",
   "source": "train.head()",
   "id": "5c5f2f4f20fe4cfb",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  prob  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0   0.0        6.0     0.0       451   \n",
       "1    34176          121    0.0   0.0        6.0     0.0       451   \n",
       "2    34176         4356    1.0   0.0        6.0     0.0       451   \n",
       "3    34176         2217    0.0   0.0        6.0     0.0       451   \n",
       "4   230784         4818    0.0   0.0        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  time_stamp_unique  ...  brand_id_most  \\\n",
       "0               109             45                 47  ...         4094.0   \n",
       "1               109             45                 47  ...         4094.0   \n",
       "2               109             45                 47  ...         4094.0   \n",
       "3               109             45                 47  ...         4094.0   \n",
       "4                20             17                 16  ...         1236.0   \n",
       "\n",
       "   action_type_most  seller_id_most_cnt  cat_id_most_cnt  brand_id_most_cnt  \\\n",
       "0                 0                  70               98                 70   \n",
       "1                 0                  70               98                 70   \n",
       "2                 0                  70               98                 70   \n",
       "3                 0                  70               98                 70   \n",
       "4                 0                  10                9                 10   \n",
       "\n",
       "   action_type_most_cnt  action_type_sum_0  action_type_sum_1  \\\n",
       "0                   410                  0                  0   \n",
       "1                   410                  0                  0   \n",
       "2                   410                  0                  0   \n",
       "3                   410                  0                  0   \n",
       "4                    47                  0                  0   \n",
       "\n",
       "   action_type_sum_2  action_type_sum_3  \n",
       "0                  0                  0  \n",
       "1                  0                  0  \n",
       "2                  0                  0  \n",
       "3                  0                  0  \n",
       "4                  0                  0  \n",
       "\n",
       "[5 rows x 24 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2</th>\n",
       "      <th>action_type_sum_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>16</td>\n",
       "      <td>...</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>47</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 106
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:15.017260Z",
     "start_time": "2024-09-19T09:29:11.830883Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train.to_csv(r\"D:\\桌面\\天猫复购预测\\data\\data_format1\\train_all_k.csv\",header=True,index=False)\n",
    "test.to_csv(r\"D:\\桌面\\天猫复购预测\\data\\data_format1\\test_all_k.csv\",header=True,index=False)"
   ],
   "id": "e1eafe4bba79b956",
   "outputs": [],
   "execution_count": 107
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:15.030243Z",
     "start_time": "2024-09-19T09:29:15.022679Z"
    }
   },
   "cell_type": "code",
   "source": "train['label'].value_counts()",
   "id": "ca5e85a594d91d39",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "label\n",
       "0.0    241303\n",
       "1.0     15838\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 108
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:15.691540Z",
     "start_time": "2024-09-19T09:29:15.031241Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train_data = pd.read_csv(r\"D:\\桌面\\天猫复购预测\\data\\data_format1\\\\train_all_k.csv\")\n",
    "test_data = pd.read_csv(r\"D:\\桌面\\天猫复购预测\\data\\data_format1\\\\test_all_k.csv\")"
   ],
   "id": "3c5a4c65c4d16932",
   "outputs": [],
   "execution_count": 109
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:15.709324Z",
     "start_time": "2024-09-19T09:29:15.692548Z"
    }
   },
   "cell_type": "code",
   "source": "train_data.head()",
   "id": "a9a061de3e3421e9",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  prob  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0   0.0        6.0     0.0       451   \n",
       "1    34176          121    0.0   0.0        6.0     0.0       451   \n",
       "2    34176         4356    1.0   0.0        6.0     0.0       451   \n",
       "3    34176         2217    0.0   0.0        6.0     0.0       451   \n",
       "4   230784         4818    0.0   0.0        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  time_stamp_unique  ...  brand_id_most  \\\n",
       "0               109             45                 47  ...         4094.0   \n",
       "1               109             45                 47  ...         4094.0   \n",
       "2               109             45                 47  ...         4094.0   \n",
       "3               109             45                 47  ...         4094.0   \n",
       "4                20             17                 16  ...         1236.0   \n",
       "\n",
       "   action_type_most  seller_id_most_cnt  cat_id_most_cnt  brand_id_most_cnt  \\\n",
       "0                 0                  70               98                 70   \n",
       "1                 0                  70               98                 70   \n",
       "2                 0                  70               98                 70   \n",
       "3                 0                  70               98                 70   \n",
       "4                 0                  10                9                 10   \n",
       "\n",
       "   action_type_most_cnt  action_type_sum_0  action_type_sum_1  \\\n",
       "0                   410                  0                  0   \n",
       "1                   410                  0                  0   \n",
       "2                   410                  0                  0   \n",
       "3                   410                  0                  0   \n",
       "4                    47                  0                  0   \n",
       "\n",
       "   action_type_sum_2  action_type_sum_3  \n",
       "0                  0                  0  \n",
       "1                  0                  0  \n",
       "2                  0                  0  \n",
       "3                  0                  0  \n",
       "4                  0                  0  \n",
       "\n",
       "[5 rows x 24 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>prob</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2</th>\n",
       "      <th>action_type_sum_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>47</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>16</td>\n",
       "      <td>...</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>47</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 110
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:15.713728Z",
     "start_time": "2024-09-19T09:29:15.710329Z"
    }
   },
   "cell_type": "code",
   "source": "train_data.shape",
   "id": "d7f0412567b85cda",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(257141, 24)"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 111
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:15.717724Z",
     "start_time": "2024-09-19T09:29:15.713728Z"
    }
   },
   "cell_type": "code",
   "source": "test_data.shape",
   "id": "add0a310b85f8bb",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(257626, 23)"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 112
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:16.097845Z",
     "start_time": "2024-09-19T09:29:15.717724Z"
    }
   },
   "cell_type": "code",
   "source": "all_data = pd.read_csv(r\"D:\\桌面\\天猫复购预测\\data\\data_format1\\all_k.csv\")",
   "id": "289fada9b88c8eb6",
   "outputs": [],
   "execution_count": 113
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T09:29:16.103688Z",
     "start_time": "2024-09-19T09:29:16.098851Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.shape",
   "id": "2433b78671fcc49",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(257141, 24)"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 114
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "",
   "id": "33c9168e5040ab1d"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
